package ca.utoronto.utm.csc301.euchre.player;

import java.util.List;

import ca.utoronto.utm.csc301.euchre.common.Card;
import ca.utoronto.utm.csc301.euchre.common.Suit;

/**
 * This interface should be implemented by player groups.
 *
 */
public interface Player {
	
	/**
	 * This is used for setting the id of a player.
	 * 
	 * @param id It is the id of the player which is set by the Game Manager.
	 */
	public void setId(int id);
	
	/**
	 * This method is called when a new hand is started. It is called by 
	 * the game manager. 
	 * 
	 * @param hand The list of cards for the player. 
	 */
	public void setHand(List<Card> hand);
	
	/**
	 * It called for each player for bidding.
	 *  
	 * @param isTheFirstBid indicates whether this is the first bidding round or not.
	 * @return The trump suit, or null if the player do not want to make trump. 
	 */
	public Suit makeTrump(boolean isTheFirstBid);
	
	/**
	 * It shows whether the player wants to go it alone
	 * 
	 * @return true if the player wants to go it alone, otherwise false.
	 */
	public boolean isGoingAlone();
	
	/**
	 * It is called for the dealer player to pick the top card up and drop a card from his hand.
	 * 
	 * @return the dropped card.
	 */
	public Card pick();
	
	/**
	 * It is called when a player must play a card.
	 *  	
	 * @return the card played.
	 */
	public Card play();
}
